% -*- coding: utf-8 -*-
% !TEX program = lualatex
\documentclass[oneside]{book}

\input{manual.sty}
\CodeHigh{lite}

\begin{document}

% \chapter{Overview of Features}
\chapter{概述}

在使用 \verb!tabularray! 宏包前，建议先熟悉如何使用传统 \verb!tabular!、
\verb!tabularx! 和 \verb!array! 环境排版文本和数学表格，
这是因为在此需要比较\verb!tabularray!宏包的 \verb!tblr! 环境与这些环境的区别。
可以通过阅读
\href{https://www.learnlatex.org/en/lesson-08}{LearnLaTeX} 和
\href{https://www.overleaf.com/learn/latex/Tables}{Overleaf} 学习使用
\LaTeX{}表格。

% \section{Vertical Space}
\section{垂直间距}

% After loading \verb!tabularray! package in the preamble,
% we can use \verb!tblr! environments to typeset tabulars and arrays.
% The name \verb!tblr! is short for \verb!tabularray! or \verb!top-bottom-left-right!.
% The following is our first example:
在导言区加载\verb!Tabularray!宏包后，
可以使用\verb!tblr!环境排版表格(tabulars)或阵列(arrays)。
环境名\verb!tblr!是\verb!tabularray!或\verb!top-bottom-left-right!的缩写。
下例说明了常规\verb!tabular!环境与\verb!tblr!环境排版表格的异同：

\begin{demo}
\begin{tabular}{lccr}
\hline
 Alpha   & Beta  & Gamma  & Delta \\
\hline
 Epsilon & Zeta  & Eta    & Theta \\
\hline
 Iota    & Kappa & Lambda & Mu    \\
\hline
\end{tabular}
\end{demo}

\begin{demohigh}
\begin{tblr}{lccr}
\hline
 Alpha   & Beta  & Gamma  & Delta \\
\hline
 Epsilon & Zeta  & Eta    & Theta \\
\hline
 Iota    & Kappa & Lambda & Mu    \\
\hline
\end{tblr}
\end{demohigh}

% You may notice that there is extra space above and below the table rows with \verb!tblr! environment.
% This space makes the table look better.
% If you don't like it, you could use \verb!\SetTblrInner! command:
显然，用\verb!tblr!环境排版表格时，在表格各行上下会增加额外垂直间距。
该间距使表格排版更为美观。当然，可以使用 \verb!\SetTblrDefault!
命令根据需要对该垂直间距进行调整，例如，可以用如下代码取消间距：

\begin{demohigh}
\SetTblrInner{rowsep=0pt}
\begin{tblr}{lccr}
\hline
 Alpha   & Beta  & Gamma  & Delta \\
\hline
 Epsilon & Zeta  & Eta    & Theta \\
\hline
 Iota    & Kappa & Lambda & Mu    \\
\hline
\end{tblr}
\end{demohigh} 

% But in many cases, this rowsep is useful:
但多数情况下，使用\verb!rowsep!间距将使表格排版更为美观，例如如下带有分式的表格：

\begin{demo}
$\begin{array}{rrr}
\hline
 \dfrac{2}{3} &  \dfrac{2}{3} &  \dfrac{1}{3} \\
 \dfrac{2}{3} & -\dfrac{1}{3} & -\dfrac{2}{3} \\
 \dfrac{1}{3} & -\dfrac{2}{3} &  \dfrac{2}{3} \\
\hline
\end{array}$
\end{demo}

\begin{demohigh}
$\begin{tblr}{rrr}
\hline
 \dfrac{2}{3} &  \dfrac{2}{3} &  \dfrac{1}{3} \\
 \dfrac{2}{3} & -\dfrac{1}{3} & -\dfrac{2}{3} \\
 \dfrac{1}{3} & -\dfrac{2}{3} &  \dfrac{2}{3} \\
\hline
\end{tblr}$
\end{demohigh}

% Note that you can use \verb!tblr! in both text and math modes.
需要说明的是，\verb!tblr!环境既可以用于文本模式，也可以用于数学模式。

% \section{Multiline Cells}
\section{多行单元格}

% It's quite easy to write multiline cells without fixing the column width in \verb!tblr! environments:
% just enclose the cell text with braces and use \verb!\\! to break lines:
使用\verb!tblr!环境排版表格时，不使用定宽列格式就可以实现多行单元格排版。
此时，仅需用大括号将单元格中需要多行排版的内容包围起来，
然后在大括号内中使用\verb!\\!手动断行即可，如：

\begin{demohigh}
\begin{tblr}{|l|c|r|}
\hline
 Left & {Center \\ Cent \\ C} & {Right \\ R} \\
\hline
 {L \\ Left} & {C \\ Cent \\ Center} & R \\
\hline
\end{tblr}
\end{demohigh}

% \section{Cell Alignment}
\section{单元格对齐方式}

% From time to time,
% you may want to specify the horizontal and vertical alignment of cells at the same time.
% \verb!Tabularray! package provides a \verb!Q! column for this
% (In fact, \verb!Q! column is the only primitive column,
% other columns are defined as \verb!Q! columns with some options):
% 在排版时，可能需要同时指定单元格的水平与垂直对齐方式。
\verb!Tabularray!宏包提供了\verb!Q!列格式用于同时指定单元格水平和垂直对齐方式。
实质上，\verb!Q!格式是该宏包提供的唯一列格式元格式，
其它的列格式都是通过为\verb!Q!元格式设置不同参数实现定义的。

\begin{demohigh}
\begin{tblr}{|Q[l,t]|Q[c,m]|Q[r,b]|}
\hline
 {Top Baseline\\Left Left} & Middle Center & {Right Right\\Bottom Baseline} \\
\hline
\end{tblr}
\end{demohigh} 

% Note that you can use more meaningful \verb!t! instead of \verb!p! for top baseline alignment.
% For some users who are familiar with word processors,
% these \verb!t! and \verb!b! columns are counter-intuitive.
% In \verb!tabularray! package, there are another two column types \verb!h! and \verb!f!,
% which will align cell text at the head and the foot, respectively:
注意，对于顶端基线对齐，可使用含义更为明确的\verb!t!格式替代\verb!p!格式。
对于熟悉字处理工具的用户而言，类似\verb!t!和\verb!b!这些格式是违背直觉的，
其中，\verb!t!是顶端与基线对齐，不是顶端对齐，而\verb!b!是底端与基线对齐，不是底端对齐。
在\verb!Tabularray!宏包中，定义了\verb!h!和\verb!f!格式,
以分别实现常规意义上的顶端对齐和底端对齐：

\begin{demohigh}
\begin{tblr}{Q[h,4em]Q[t,4em]Q[m,4em]Q[b,4em]Q[f,4em]}
\hline
 {row\\head} & {top\\line} & {middle} & {line\\bottom} & {row\\foot} \\
\hline
 {row\\head} & {top\\line} & {11\\22\\mid\\44\\55}
 & {line\\bottom} & {row\\foot} \\
\hline
\end{tblr}
\end{demohigh}

% \section{Multirow Cells}
\section{单元格行合并}

% The above \verb!h! and \verb!f! alignments are necessary
% when we write multirow cells with \verb!\SetCell! command in \verb!tabularray!.
在\verb!Tabularray!中，可以使用\verb!\SetCell!命令实现单元格行合并，
此时，常用\verb!h!和\verb!f!列对齐格式。

\begin{demo}
\begin{tabular}{|l|l|l|l|}
\hline
\multirow[t]{4}{1.5cm}{Multirow Cell One}
& Alpha &
\multirow[b]{4}{1.5cm}{Multirow Cell Two}
& Alpha \\
& Beta  & & Beta \\
& Gamma & & Gamma \\
& Delta & & Delta \\
\hline
\end{tabular}
\end{demo}

\begin{demohigh}
\begin{tblr}{|l|l|l|l|}
\hline
\SetCell[r=4]{h,1.5cm} Multirow Cell One
& Alpha &
\SetCell[r=4]{f,1.5cm} Multirow Cell Two
& Alpha \\
& Beta  & & Beta \\
& Gamma & & Gamma \\
& Delta & & Delta \\
\hline
\end{tblr}
\end{demohigh}

% Note that you don't need to load \verb!multirow! package first,
% since \verb!tabularray! doesn't depend on it.
% Furthermore, \verb!tabularray! will always typeset decent multirow cells.
% First, it will set correct vertical middle alignment,
% even though some rows have large height:
注意，由于\verb!Tabularray!宏包并不依赖\verb!multirow!宏包，
因此，在行合并前并不需要载入\verb!multirow!宏包。
此外，\verb!Tabularray!宏包将自动处理单元格行合并后的垂直对齐，
这使得即便是在某些行的行高较大，也能够正确地实现行合并后的垂直居中对齐。

\begin{demo}
\begin{tabular}{|l|m{4em}|}
\hline
 \multirow[c]{4}{1.5cm}{Multirow} & Alpha  \\
 & Beta  \\
 & Gamma \\
 & Delta Delta Delta \\
\hline
\end{tabular}
\end{demo}

\begin{demohigh}
\begin{tblr}{|l|m{4em}|}
\hline
 \SetCell[r=4]{m,1.5cm} Multirow & Alpha  \\
 & Beta  \\
 & Gamma \\
 & Delta Delta Delta \\
\hline
\end{tblr}
\end{demohigh}

% Second, it will enlarge row heights if the multirow cells have large height,
% therefore it always avoids vertical overflow:
同时，如果行合并后的文字累计行高大于表格行高，
则\verb!Tabularray!会自动扩展合并后单元格行高，
从而确保不会发生文字垂直溢出现象。

\begin{demo}
\begin{tabular}{|l|m{4em}|}
\hline
 \multirow[c]{2}{1cm}{Line\\Line\\Line\\Line} & Alpha \\
\cline{2-2}
 & Beta \\
\hline
\end{tabular}
\end{demo}

\begin{demohigh}
\begin{tblr}{|l|m{4em}|}
\hline
 \SetCell[r=2]{m,1cm} {Line\\Line\\Line\\Line} & Alpha \\
\cline{2}
 & Beta \\
\hline
\end{tblr}
\end{demohigh}

% If you want to distribute extra vertical space evenly to two rows,
% you may use \verb!vspan! option described in Chapter \ref{chap:extra}.
如果想把额外的垂直空间均匀地分配给两行。
可以使用第\ref{chap:extra}章说明的 \verb!vspan! 选项。

% \section{Multi Rows and Columns}
\section{单元格行合并和列合并}

% It was a hard job to typeset cells with multiple rows and multiple columns. For example:
在传统\verb!tabular!表格中，同时实现单元格行合并和列合并是比较困难的，例如：

\begin{demo}
\begin{tabular}{|c|c|c|c|c|}
\hline
\multirow{2}{*}{2 Rows}
& \multicolumn{2}{c|}{2 Columns}
& \multicolumn{2}{c|}
 {\multirow{2}{*}{2 Rows 2 Columns}} \\
\cline{2-3}
     & 2-2 & 2-3 & \multicolumn{2}{c|}{} \\
\hline
3-1 & 3-2 & 3-3 & 3-4 & 3-5 \\
\hline
\end{tabular}
\end{demo}

% With \verb!tabularray! package, you can set spanned cells with \verb!\SetCell! command:
% within the optional argument of \verb!\SetCell! command,
% option \verb!r! is for rowspan number, and \verb!c! for colspan number;
% within the mandatory argument of it, horizontal and vertical alignment options are accepted.
% Therefore it's much simpler to typeset spanned cells:
但在\verb!Tabularray!宏包中，可以简单地使用\verb!\SetCell!命令实现单元格合并。
在\verb!\SetCell!命令的可选参数中，\verb!r!选项用于指定需要合并的行数，
\verb!c!选项用于指定需要合并的列数。
在\verb!\SetCell!命令的必选参数中，可以指定合并后的水平和垂直对齐方式。
因此，在\verb!Tabularray!中，单元格合并将更为简捷：

\begin{demohigh}
\begin{tblr}{|c|c|c|c|c|}
\hline
 \SetCell[r=2]{c} 2 Rows & \SetCell[c=2]{c} 2 Columns
     & & \SetCell[r=2,c=2]{c} 2 Rows 2 Columns & \\
\hline
     & 2-2 & 2-3 &     &     \\
\hline
 3-1 & 3-2 & 3-3 & 3-4 & 3-5 \\
\hline
\end{tblr}
\end{demohigh}

% Using \verb!\multicolumn! command, the omitted cells \textcolor{red3}{must} be removed.
% On the contrary,
在使用\verb!\multicolumn!命令时，\textcolor{red3}{必须删除}需要合并的其它单元格。
相反，
% using \verb!\multirow! command, the omitted cells \textcolor{red3}{must not} be removed.
% \verb!\SetCell! command behaves the same as \verb!\multirow! command in this aspect.
在使用\verb!\multirow!命令时，则\textcolor{red3}{必须保留}需要合并的其它单元格。
\verb!\SetCell!命令则与\verb!\multirow!命令的行为相同。

% With \verb!tblr! environment, any \verb!\hline! segments inside a spanned cell will be ignored,
% therefore we're free to use \verb!\hline! in the above example.
% Also, any omitted cell will definitely be ignored when typesetting,
% no matter it's empty or not.
% With this feature, we could put row and column numbers into the omitted cells,
% which will help us to locate cells when the tables are rather complex:
在使用\verb!tblr!环境中，由于会自动忽略合并单元格的\verb!\hline!线段，
因此，在上述示例中，可以直接使用\verb!\hline!命令绘制表格横线。
同时，无论单元格是否留空，任何合并时省略的单元格在排版时都会被忽略。
基于此，在排版表格时，可以将行号、列号或其它标识性内容写入需要省略的单元格，
这有助于在排版复杂表格时的单元格定位，如：

\begin{demohigh}
\begin{tblr}{|ll|c|rr|}
\hline
 \SetCell[r=3,c=2]{h} r=3 c=2 & 1-2 & \SetCell[r=2,c=3]{r} r=2 c=3 & 1-4 & 1-5 \\ 
 2-1 & 2-2 & 2-3 & 2-4 & 2-5 \\
\hline
 3-1 & 3-2 & MIDDLE & \SetCell[r=3,c=2]{f} r=3 c=2 & 3-5 \\
\hline
 \SetCell[r=2,c=3]{l} r=2 c=3 & 4-2 & 4-3 & 4-4 & 4-5 \\
 5-1 & 5-2 & 5-3 & 5-4 & 5-5 \\
\hline
\end{tblr}
\end{demohigh}

% \section{Column Types}
\section{列格式}

% \verb!Tabularray! package supports all normal column types, as well as
% the extendable \verb!X! column type,
% which first occurred in \verb!tabularx! package and was largely improved by \verb!tabu! package:
\verb!Tabularray!宏包支持所有常规的列格式，包括第一次出现在\verb!tabularx!宏包中，
并被\verb!tabu!宏包优化后的可扩展\verb!X!列格式。

\begin{demohigh}
\begin{tblr}{|X[2,l]|X[3,l]|X[1,r]|X[r]|}
\hline
 Alpha & Beta & Gamma & Delta \\
\hline
\end{tblr}
\end{demohigh}

% Also, \verb!X! columns with negative coefficients are possible:
此外，还可以在\verb!X!列格式的比例系数可以取负值：

\begin{demohigh}
\begin{tblr}{|X[2,l]|X[3,l]|X[-1,r]|X[r]|}
\hline
 Alpha & Beta & Gamma & Delta \\
\hline
\end{tblr}
\end{demohigh}

% We need the width to typeset a table with \verb!X! columns.
% If unset, the default is \verb!\linewidth!.
% To change the width, we have to first put all column specifications into \verb!colspec={...}!:
在使用\verb!X!列格式排版表格时，需要指定表格宽度。
如未设置，则默认为 \verb!\linewidth!。
如需更改表格宽度，则必须将所有列格式置入\verb!colspec={...}!选项的参数中：

\begin{demohigh}
\begin{tblr}{width=0.8\linewidth,colspec={|X[2,l]|X[3,l]|X[-1,r]|X[r]|}}
\hline
 Alpha & Beta & Gamma & Delta \\
\hline
\end{tblr}
\end{demohigh}

% You can define new column types with \verb!\NewColumnType! command.
% For example, in \verb!tabularray! package,
% \verb!b! and \verb!X! columns are defined as special \verb!Q! columns:
可以使用\verb!\NewColumnType!命令定义新的列格式。
例如，在\verb!Tabularray!宏包中，\verb!b!和\verb!X!列格式
是用\verb!Q!元格式通过指定必要参数实现的：
\begin{codehigh}
\NewColumnType{b}[1]{Q[b,wd=#1]}
\NewColumnType{X}[1][]{Q[co=1,#1]}
\end{codehigh}

% \section{Row Types}
\section{行格式}

% Now that we have column types and \verb!colspec! option,
% you may ask for row types and \verb!rowspec! option.
% Yes, they are here:
除了可以使用\verb!colspec!选项指定列格式外，
也可以通过\verb!rowspec!选项指定行格式，如：

\begin{demohigh}
\begin{tblr}{colspec={Q[l]Q[c]Q[r]},rowspec={|Q[t]|Q[m]|Q[b]|}}
 {Alpha \\ Alpha} & Beta               & Gamma \\
 Delta            & Epsilon            & {Zeta \\ Zeta}  \\
 Eta              & {Theta \\ Theta}   & Iota  \\
\end{tblr}
\end{demohigh}

% Same as column types, \verb!Q! is the only primitive row type,
% and other row types are defined as \verb!Q! types with different options.
% It's better to specify horizontal alignment in \verb!colspec!,
% and vertical alignment in \verb!rowspec!, respectively.
与列格式类似，\verb!Q!是唯一的行格式的元格式，
其它行格式都是通过为\verb!Q!元格式指定不同参数实现的。
强烈建议在\verb!colspec!中指定水平对齐方式，在\verb!rowspec!中指定垂直对齐方式。

% Inside \verb!rowspec!, \verb!|! is the hline type.
% Therefore we need not to write \verb!\hline! command, which makes table code cleaner.
在\verb!rowspec!中，\verb!|!用于指定表格横线格式。
因此，无需再在表格内容中使用\verb!\hline!命令，这会使表格代码更为清晰、可维护性更强。

% \section{Hlines and Vlines}
\section{表格横线与表格竖线}

% Hlines and vlines have been improved too. You can specify the widths and styles of them:
在\verb!Tabularray!宏包中，重新设计了表格横线和竖线命令，
可以通过命令的keyval选项指定其的宽度、线型、颜色等样式:

\begin{demohigh}
\begin{tblr}{|l|[dotted]|[2pt]c|r|[solid]|[dashed]|}
\hline
One   &  Two  & Three \\
\hline\hline[dotted]\hline
Four  & Five  &   Six \\
\hline[dashed]\hline[1pt]
Seven & Eight &  Nine \\
\hline
\end{tblr}
\end{demohigh}

% \section{Colorful Tables}
\section{彩色表格}

% To add colors to your tables, you need to load \verb!xcolor! package first.
% \verb!Tabularray! package will also load \verb!ninecolors! package for proper color contrast.
% First you can specify background option for \verb!Q! rows/columns inside \verb!rowspec!/\verb!colspec!:
如需排版彩色表格，则需加载 \verb!xcolor!宏包，
\verb!Tabularray!宏包一旦发现用户加载了\verb!xcolor!宏包，
则会自动加载\href{https://ctan.org/pkg/ninecolors}{\texttt{ninecolors}}宏包，
以使用前景与背景对比度更为合理的预定义颜色名称。
例如，可以在\verb!rowspec!/\verb!colspec!选项中通过\verb!Q!元格式
的背景参数为行/列指定背景色：

\begin{demohigh}
\begin{tblr}{colspec={lcr},
 rowspec={|Q[cyan7]|Q[azure7]|Q[blue7]|}}
 Alpha   & Beta  & Gamma  \\
 Epsilon & Zeta  & Eta    \\
 Iota    & Kappa & Lambda \\
\end{tblr}
\end{demohigh}

\begin{demohigh}
\begin{tblr}{%
 colspec={Q[l,brown7]Q[c,yellow7]Q[r,olive7]},
 rowspec={|Q|Q|Q|}}
 Alpha   & Beta  & Gamma  \\
 Epsilon & Zeta  & Eta    \\
 Iota    & Kappa & Lambda \\
\end{tblr}
\end{demohigh}

% Also you can use \verb!\SetRow! or \verb!\SetColumn! command to specify row or column colors:
当然，也可以使用\verb!\SetRow!或\verb!\SetColumn!命令统一为指定的行或列设置颜色：

\begin{demohigh}
\begin{tblr}{colspec={lcr},rowspec={|Q|Q|Q|}}
 \SetRow{cyan7}  Alpha   & Beta  & Gamma  \\
 \SetRow{azure7} Epsilon & Zeta  & Eta    \\
 \SetRow{blue7}  Iota    & Kappa & Lambda \\
\end{tblr}
\end{demohigh}

\begin{demohigh}
\begin{tblr}{colspec={lcr},rowspec={|Q|Q|Q|}}
 \SetColumn{brown7}
 Alpha          & \SetColumn{yellow7}
                  Beta            & \SetColumn{olive7}
                                    Gamma  \\
 Epsilon        & Zeta            & Eta    \\
 Iota           & Kappa           & Lambda \\
\end{tblr}
\end{demohigh}

% Hlines and vlines can also have colors:
此外，还可以为表格横线和竖线指定颜色:

\begin{demohigh}
\begin{tblr}{colspec={lcr},
 rowspec={|[2pt,green7]Q|[teal7]Q|[green7]Q|[3pt,teal7]}}
 Alpha   & Beta  & Gamma  \\
 Epsilon & Zeta  & Eta    \\
 Iota    & Kappa & Lambda \\
\end{tblr}
\end{demohigh}

\begin{demohigh}
\begin{tblr}{colspec={|[2pt,violet5]l|[2pt,magenta5]c|
 [2pt,purple5]r|[2pt,red5]}}
 Alpha   & Beta  & Gamma  \\
 Epsilon & Zeta  & Eta    \\
 Iota    & Kappa & Lambda \\
\end{tblr}
\end{demohigh}

\end{document}
